home *** CD-ROM | disk | FTP | other *** search
GW-BASIC | 1980-01-01 | 8.8 KB | 398 lines |
- 10 '********************************************************
- 20 '** TEXT **
- 30 '** SINGLE-PAGE TEXT EDITOR **
- 40 '** VERS 1.1 OCT, 1982 **
- 50 '********************************************************
- 60 '
- 70 CLEAR
- 80 SCREEN 0
- 90 COLOR 7,0,0
- 100 WIDTH 80
- 110 KEY OFF
- 120 DEFINT A-Z
- 130 OPTION BASE 1
- 140 DEF FNR = 20 * PAGE + ROW - 1
- 150 DEF FNC(X$)= X$<"0" OR (X$>"9" AND X$<"A") OR (X$>"Z" AND X$<"a") OR X$>"z"
- 160 DIM ARRAY$(60),TEMP$(60),MARK(60)
- 170 TABS$ = SPACE$(80)
- 180 MID$(TABS$,8,1) = "T" ' Default tabs set
- 190 MID$(TABS$,50,1) = "T" ' at columns 8 and 50
- 200 TOP = 0
- 210 MID = 1
- 220 BOT = 2
- 230 LST = 3
- 240 LMARGIN = 0 ' Spaces on left in printout
- 250 EDGE$ = STRING$(80,205)
- 260 MIDDLE$ = STRING$(80,176)
- 270 FOR PLACE = 1 TO 7
- 280 MID$(EDGE$,10 * PLACE,1) = CHR$(48 + PLACE)
- 290 MID$(MIDDLE$,10 * PLACE,1) = CHR$(48 + PLACE)
- 300 NEXT PLACE
- 310 '
- 320 FOR PAGE = TOP TO BOT ' Initialize the three screens
- 330 SCREEN 0,0,PAGE,0
- 340 CLS
- 350 LOCATE 1,1,1,7,7
- 360 IF PAGE = TOP THEN PRINT EDGE$ ELSE PRINT MIDDLE$
- 370 LOCATE 22,1,1,7,7
- 380 IF PAGE = BOT THEN PRINT EDGE$ ELSE PRINT MIDDLE$
- 390 LOCATE 24,3
- 400 PRINT "Alt-S Save text Alt-I Insert line(s) ";
- 410 PRINT "Alt-T Tab set Alt-P Print text";
- 420 LOCATE 25,3
- 430 PRINT "Alt-L Load text Alt-D Delete line(s) ";
- 440 PRINT "Alt-C Clr tab Alt-M Mark line";
- 450 NEXT PAGE
- 460 '
- 470 FOR I = 1 TO 60
- 480 ARRAY$(I) = SPACE$(80)
- 490 NEXT I
- 500 PAGE = TOP
- 510 SCREEN 0,0,PAGE,PAGE
- 520 ROW = 2
- 530 COL = 1
- 540 '
- 550 WHILE PFLAG ' Most functions return to here
- 560 LOCATE ROW,1
- 570 PRINT ARRAY$(FNR);
- 580 COL = INSTR(ARRAY$(FNR)," ")
- 590 PFLAG = 0
- 600 WEND
- 610 IF INSERT = 0 THEN LOCATE ROW,COL + (COL > 80),1,7,7
- 620 IF INSERT = 1 THEN LOCATE ROW,COL + (COL > 80),1,4,6
- 630 '
- 640 K$ = INKEY$ ' Scan keyboard over and over
- 650 IF K$ = "" THEN 640
- 660 K = ASC(K$)
- 670 IF K = 0 THEN 1280 ' Probably an Alt-key
- 680 '
- 690 IF K <> 3 THEN 730 ' Ctrl-Break
- 700 CLS
- 710 END
- 720 '
- 730 IF K <> 8 THEN 780 ' Back arrow
- 740 IF COL = 1 THEN 550
- 750 COL = COL - 1
- 760 GOTO 3010
- 770 '
- 780 IF K <> 9 THEN 860 ' Tab
- 790 INSERT = 0
- 800 COL = COL - (COL < 80)
- 810 LOCATE ROW,COL,1,7,7
- 820 IF COL = 80 THEN 550
- 830 IF MID$(TABS$,COL,1) = " " THEN 800
- 840 GOTO 550
- 850 '
- 860 IF K <> 13 THEN 930 ' Enter
- 870 INSERT = 0
- 880 COL = 1
- 890 ROW = ROW + 1
- 900 IF ROW > 21 THEN K$ = CHR$(0)+CHR$(81) : GOTO 1280
- 910 GOTO 550
- 920 '
- 930 IF K <> 27 THEN 1010 ' Esc
- 940 INSERT = 0
- 950 ARRAY$(FNR) = SPACE$(80)
- 960 COL = 1
- 970 LOCATE ROW,COL,1,7,7
- 980 PRINT SPACE$(80);
- 990 GOTO 550
- 1000 '
- 1010 IF K < 32 OR K > 126 THEN 3810
- 1020 '
- 1030 IF INSERT = 0 THEN 1080 ' Character
- 1040 ARRAY$(FNR) = LEFT$(ARRAY$(FNR),COL-1)+K$+MID$(ARRAY$(FNR),COL,80-COL)
- 1050 LOCATE ROW,1,0
- 1060 PRINT ARRAY$(FNR);
- 1070 GOTO 1230
- 1080 IF COL < 81 THEN 1210
- 1090 IF FNR = 60 THEN 1250
- 1100 SPP = 1
- 1110 ARRAY$(FNR) = LEFT$(ARRAY$(FNR),80)
- 1120 WHILE INSTR(SPP,ARRAY$(FNR)," ")
- 1130 SPP = INSTR(SPP,ARRAY$(FNR)," ") + 1
- 1140 WEND
- 1150 ARRAY$(FNR+1)= MID$(ARRAY$(FNR),SPP) + K$ +" "+ LEFT$(ARRAY$(FNR+1),SPP-3)
- 1160 ARRAY$(FNR) = LEFT$(ARRAY$(FNR),SPP-1) + SPACE$(81-SPP)
- 1170 LOCATE ROW,1,0
- 1180 PRINT ARRAY$(FNR);
- 1190 PFLAG = 1
- 1200 GOTO 890
- 1210 PRINT K$;
- 1220 MID$(ARRAY$(FNR),COL,1) = K$
- 1230 COL = COL + 1
- 1240 IF COL = 72 THEN SOUND 999,1
- 1250 IF COL > 80 THEN SOUND 777,3
- 1260 GOTO 550
- 1270 '
- 1280 K = ASC(RIGHT$(K$,1)) ' Double byte INKEY$ codes
- 1290 IF K <> 15 THEN 1370 ' Back tab
- 1300 INSERT = 0
- 1310 COL = COL + (COL > 1)
- 1320 LOCATE ROW,COL,1,7,7
- 1330 IF COL = 1 THEN 550
- 1340 IF MID$(TABS$,COL,1) = " " THEN 1310
- 1350 GOTO 550
- 1360 '
- 1370 IF K <> 20 THEN 1420 ' Alt-T
- 1380 INSERT = 0
- 1390 MID$(TABS$,COL,1) = "T"
- 1400 GOTO 550
- 1410 '
- 1420 IF K <> 23 THEN 1860 ' Alt-I
- 1430 INSERT = 0
- 1440 SCREEN 0,0,LST,LST
- 1450 CLS
- 1460 LOCATE 12,22
- 1470 BFLAG = 1
- 1480 FOR I = 1 TO 60
- 1490 IF MARK(I) THEN BFLAG = 0
- 1500 NEXT I
- 1510 IF BFLAG THEN 1770
- 1520 PRINT "Inserting marked lines ..."
- 1530 FUNROW = FNR
- 1540 FOR I = 1 TO 60
- 1550 TEMP$(I) = ARRAY$(I)
- 1560 NEXT I
- 1570 I = 0
- 1580 J = 0
- 1590 WHILE I < 60
- 1600 I = I + 1
- 1610 IF MARK(I) THEN FUNROW = FUNROW + (FUNROW > 1)
- 1620 IF I <> FUNROW THEN 1680
- 1630 FOR L = 1 TO 60
- 1640 IF MARK(L) = 0 THEN 1670
- 1650 ARRAY$(I) = TEMP$(L)
- 1660 I = I + 1
- 1670 NEXT L
- 1680 J = J + 1
- 1690 IF J > 60 THEN 1720
- 1700 IF MARK(J) THEN 1680
- 1710 ARRAY$(I) = TEMP$(J)
- 1720 WEND
- 1730 FOR I = 1 TO 60
- 1740 MARK(I) = 0
- 1750 NEXT I
- 1760 GOTO 1820
- 1770 PRINT "Inserting a blank line ..."
- 1780 FOR I = 59 TO FNR STEP -1
- 1790 ARRAY$(I+1) = ARRAY$(I)
- 1800 NEXT I
- 1810 ARRAY$(FNR) = SPACE$(80)
- 1820 GOSUB 3840
- 1830 SCREEN 0,0,PAGE,PAGE
- 1840 GOTO 550
- 1850 '
- 1860 IF K <> 25 THEN 1960 ' Alt-P
- 1870 INSERT = 0
- 1880 FOR I = 1 TO 60
- 1890 LPRINT SPACE$(LMARGIN)+LEFT$(ARRAY$(I),80-LMARGIN);
- 1900 NEXT I
- 1910 LPRINT CHR$(12);
- 1920 SCREEN 0,0,PAGE,PAGE
- 1930 POKE 106,0
- 1940 GOTO 550
- 1950 '
- 1960 IF K <> 32 THEN 2260 ' Alt-D
- 1970 INSERT = 0
- 1980 SCREEN 0,0,LST,LST
- 1990 CLS
- 2000 LOCATE 12,22
- 2010 BFLAG = 0
- 2020 FOR I = 1 TO 60
- 2030 IF MARK(I) THEN BFLAG = 1
- 2040 NEXT I
- 2050 IF BFLAG THEN 2090
- 2060 MARK(FNR) = 1
- 2070 PRINT "Deleting line at cursor ..."
- 2080 GOTO 2100
- 2090 PRINT "Deleting marked lines ..."
- 2100 FOR I = 1 TO 60
- 2110 WHILE MARK(I)
- 2120 FOR J = I TO 60
- 2130 IF J = 60 THEN 2170
- 2140 ARRAY$(J) = ARRAY$(J+1)
- 2150 MARK(J) = MARK(J+1)
- 2160 GOTO 2190
- 2170 ARRAY$(J) = SPACE$(80)
- 2180 MARK(J) = 0
- 2190 NEXT J
- 2200 WEND
- 2210 NEXT I
- 2220 GOSUB 3840
- 2230 SCREEN 0,0,PAGE,PAGE
- 2240 GOTO 550
- 2250 '
- 2260 IF K <> 46 THEN 2310 ' Alt-C
- 2270 INSERT = 0
- 2280 MID$(TABS$,COL,1) = " "
- 2290 GOTO 550
- 2300 '
- 2310 IF K <> 50 THEN 2430 ' Alt-M
- 2320 INSERT = 0
- 2330 RW = CSRLIN
- 2340 IF SCREEN(RW,1,1) MOD 17 = 7 THEN COLOR 0,7
- 2350 FOR CL = 1 TO 80
- 2360 LOCATE RW,CL
- 2370 PRINT CHR$(SCREEN(RW,CL));
- 2380 NEXT CL
- 2390 MARK(FNR) = (MARK(FNR) = 0)
- 2400 COLOR 7,0
- 2410 GOTO 550
- 2420 '
- 2430 IF K <> 71 THEN 2470 ' Home
- 2440 INSERT = 0
- 2450 GOTO 520
- 2460 '
- 2470 IF K <> 72 THEN 2530 ' cursor up
- 2480 INSERT = 0
- 2490 ROW = ROW - 1
- 2500 IF ROW < 2 THEN ROW = 2
- 2510 GOTO 550
- 2520 '
- 2530 IF K <> 73 THEN 2610 ' PgUp
- 2540 INSERT = 0
- 2550 IF PAGE = TOP THEN SOUND 300,2
- 2560 IF PAGE = MID THEN PAGE = TOP
- 2570 IF PAGE = BOT THEN PAGE = MID
- 2580 SCREEN 0,0,PAGE,PAGE
- 2590 GOTO 520
- 2600 '
- 2610 IF K <> 75 THEN 2670 ' Cursor left
- 2620 INSERT = 0
- 2630 COL = COL - 1
- 2640 IF COL < 1 THEN COL = 1
- 2650 GOTO 550
- 2660 '
- 2670 IF K <> 77 THEN 2730 ' Cursor right
- 2680 INSERT = 0
- 2690 COL = COL + 1
- 2700 IF COL > 80 THEN COL = 80
- 2710 GOTO 550
- 2720 '
- 2730 IF K <> 79 THEN 2810 ' End
- 2740 INSERT = 0
- 2750 COL = 80
- 2760 IF SCREEN(ROW,COL) <> 32 THEN 2690
- 2770 COL = COL - 1
- 2780 IF COL > 1 THEN 2760
- 2790 GOTO 550
- 2800 '
- 2810 IF K <> 80 THEN 2870 ' Cursor down
- 2820 INSERT = 0
- 2830 ROW = ROW + 1
- 2840 IF ROW > 21 THEN ROW = 21
- 2850 GOTO 550
- 2860 '
- 2870 IF K <> 81 THEN 2950 ' PgDn
- 2880 INSERT = 0
- 2890 IF PAGE = BOT THEN SOUND 300,2
- 2900 IF PAGE = MID THEN PAGE = BOT
- 2910 IF PAGE = TOP THEN PAGE = MID
- 2920 SCREEN 0,0,PAGE,PAGE
- 2930 GOTO 520
- 2940 '
- 2950 IF K <> 82 THEN 2990 ' Ins
- 2960 INSERT = 1
- 2970 GOTO 550
- 2980 '
- 2990 IF K <> 83 THEN 3060 ' Del
- 3000 INSERT = 0
- 3010 ARRAY$(FNR) = LEFT$(ARRAY$(FNR),COL-1)+MID$(ARRAY$(FNR),COL+1)+" "
- 3020 LOCATE ROW,1,0
- 3030 PRINT ARRAY$(FNR);
- 3040 GOTO 550
- 3050 '
- 3060 IF K <> 115 THEN 3200 ' Ctrl-cursor left
- 3070 INSERT = 0
- 3080 TGA = 1
- 3090 TGB = 0
- 3100 LOCATE ROW,COL
- 3110 COL = COL + (COL > 1)
- 3120 IF COL = 1 THEN 3180
- 3130 T$ = MID$(ARRAY$(FNR),COL,1)
- 3140 IF FNC(T$) AND TGA = TGB THEN TGA = TGA + 1
- 3150 IF FNC(T$) = 0 AND TGA > TGB THEN TGB = TGB + 1
- 3160 IF TGA < 2 THEN 3100
- 3170 COL = COL + 1
- 3180 GOTO 550
- 3190 '
- 3200 IF K <> 116 THEN 3330 ' Ctrl-cursor right
- 3210 INSERT = 0
- 3220 TGA = 0
- 3230 TGB = 0
- 3240 COL = COL - (COL < 80)
- 3250 LOCATE ROW,COL
- 3260 IF COL = 80 THEN 3310
- 3270 T$ = MID$(ARRAY$(FNR),COL,1)
- 3280 IF FNC(T$) = 0 AND TGA = TGB THEN TGA = TGA + 1
- 3290 IF FNC(T$) AND TGA > TGB THEN TGB = TGB + 1
- 3300 IF TGA < 2 THEN 3240
- 3310 GOTO 550
- 3320 '
- 3330 IF K <> 117 THEN 3390 ' Ctrl-End
- 3340 INSERT = 0
- 3350 PRINT SPACE$(81-COL);
- 3360 ARRAY$(FNR) = LEFT$(ARRAY$(FNR),COL-1)+SPACE$(81-COL)
- 3370 GOTO 550
- 3380 '
- 3390 IF K <> 119 THEN 3430 ' Ctrl-Home
- 3400 INSERT = 0
- 3410 GOTO 320
- 3420 '
- 3430 IF K <> 31 THEN 3590 ' Alt-S
- 3440 INSERT = 0
- 3450 SCREEN 0,0,LST,LST
- 3460 CLS
- 3470 FILES
- 3480 PRINT
- 3490 INPUT "File name for save ";FILE$
- 3500 IF FILE$ = "" THEN 3560
- 3510 OPEN FILE$+".TXT" FOR OUTPUT AS #1
- 3520 FOR I = 1 TO 60
- 3530 PRINT #1,ARRAY$(I)
- 3540 NEXT I
- 3550 CLOSE #1
- 3560 SCREEN 0,0,PAGE,PAGE
- 3570 GOTO 550
- 3580 '
- 3590 IF K <> 38 THEN 3810 ' Alt-L
- 3600 INSERT = 0
- 3610 SCREEN 0,0,LST,LST
- 3620 CLS
- 3630 FILES
- 3640 PRINT
- 3650 INPUT "File name for load ";FILE$
- 3660 IF FILE$ = "" THEN 3560
- 3670 ON ERROR GOTO 3940
- 3680 OPEN FILE$+".TXT" FOR INPUT AS #1
- 3690 ON ERROR GOTO 0
- 3700 FOR I = 1 TO 60
- 3710 IF NOT EOF(1) THEN LINE INPUT #1,ARRAY$(I) ELSE ARRAY$(I) = ""
- 3720 IF LEN(ARRAY$(I)) > 80 THEN ARRAY$(I) = LEFT$(ARRAY$(I),80)
- 3730 WHILE LEN(ARRAY$(I)) < 80
- 3740 ARRAY$(I) = ARRAY$(I) + SPACE$(80-LEN(ARRAY$(I)))
- 3750 WEND
- 3760 NEXT I
- 3770 CLOSE #1
- 3780 GOSUB 3840
- 3790 GOTO 500
- 3800 '
- 3810 SOUND 200,3 ' no match found for k$
- 3820 GOTO 640
- 3830 '
- 3840 TLINE = 0 ' Subroutine, string array to screen
- 3850 FOR APAGE = TOP TO BOT
- 3860 SCREEN 0,0,APAGE,APAGE
- 3870 FOR AROW = 2 TO 21
- 3880 TLINE = TLINE + 1
- 3890 LOCATE AROW,1,1,7,7
- 3900 PRINT ARRAY$(TLINE);
- 3910 NEXT AROW,APAGE
- 3920 RETURN
- 3930 '
- 3940 IF ERR <> 53 THEN 3970 ' Error trap for bad file name
- 3950 PRINT "File not found, try again"
- 3960 RESUME 3650
- 3970 ON ERROR GOTO 0
-